iT邦幫忙

1

Ruby基本介紹(五)Enumerable(枚舉)入門

  • 分享至 

  • xImage
  •  

今天是8/8...來首"Daddy"吧!

Yes


本篇會提到的事。

1.Ruby迴圈中的Iteration複習,與Enumerable簡介。


前篇文章的範例

shake = ["head", "hand", "body"]

2.7.3 :133 > shake.each {|part| puts "Shake your #{part}!"}
Shake your head!
Shake your hand!
Shake your body!
=> ["head", "hand", "body"] 

當然,如果想瞭解Iteration這個詞,直接上wiki查就好,這邊只會分享,在Rails中,each常常會見到。
再次提醒Iteration(迭代)語法後面會接block。

  array.each do |a|
    #流程控制
  end
  #也可寫作
  array.each { |a| #流程控制 }
  #do..end 或 { }就是block的寫法。
  #|a|中,| |是black內的語法,通常我們會使用迭代或Enumerable(枚舉)時,對象資料(物件, 實體)通常為陣列或雜湊,| |中裡面的變數,代表對象裡每一個資料的臨時名稱,所以可依照變數原則隨意命名。

Enumerable(枚舉)

菜鳥式回答:枚舉是迭代的進化。

範例舉例

def num_add(array)
  #流程控制區
end

p num_add([1, 2, 3]) #=> [2, 3, 4]

題目:我希望一個數字陣列資料,使用num_add這個方法後,"回傳"新的陣列,新陣列裡每個數字是舊陣列每個數字+1。

迭代解法

def num_add(array)
  #我需要一個新陣列
  #將舊陣列裡每個數字+1後,並放進新陣列裡。
  #回傳這個新陣列
end
def num_add(array)
  new_arr = []  #new_arr = Array.new 。 
  array.each {|num| new_array << num + 1}  #我也習慣,簡短的流程控制用{},複雜的用do..end。
  new_arr #return new_arr, return可省略
end

p num_add([1, 2, 3])

#  << 特殊語法,想成將東西加入陣列。

疑問:

  1. 為什麼一定要加return? 難道使用each方法沒有回傳值嗎? 不是說方法都有回傳值嗎?
  2. 用each時,程式沒有執行+1這件事嗎?

Ans:有回傳值,回傳原陣列給你,所以自己定義方法時要注意,要明確告知回傳什麼資料。
有執行+1,可是你沒有告訴電腦要顯示給你看。
一些特性等特別學習Block(程式碼區塊)後就會更了解。
補充:

2.7.3 :002 > [1, 2, 3].each {|num| puts num + 1 }
2
3
4
 => [1, 2, 3] 
枚舉解法
def num_add(array)
  array.map {|num| num + 1 }
end

#流程控制:將陣列裡每個數字+1後回傳給我。
2.7.3 :001 > [1, 2, 3].map { |num| num + 1 }
 => [2, 3, 4] 

嗯,完成,第一次看到我也是覺得WTF。(尤其我是素人)
我的確是一開始完全看不懂到底發生何事的那種初學者,但其實迭代與枚舉並不是只有Ruby才有這種觀念,很多程式語言都會有,但了解邏輯之後,其實就很簡單了。

學習過程中,多以枚舉取代迭代吧。

當然如果只會迭代也不是不可以,但就像有更好用的武器不用,硬要拿折斷的鐵劍打王,很累的。(Dark soul梗)



圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言